package manet

import (
	"fmt"
	"math/rand"
	"node"
	"packet"
	"strconv"
)

const (
	NumNodi = node.NumNodi
	Spazio = 10
	RadioRange = 3
	NumPacchetti = 6
)

type Manet struct {
	Nodes [NumNodi]node.Node
}

func NewManet() *Manet {
	var m Manet
	fmt.Println("INIT MANET")
	for i, _ := range m.Nodes {
		m.Nodes[i].Value = i
		m.Nodes[i].Ch = make(chan packet.Packet)
		m.Nodes[i].Position = rand.Intn( Spazio )
		m.Nodes[i].RadioRange = RadioRange
	}

	for _, n := range m.Nodes {
		go n.Start(m.Nodes)
	}
	
	return &m
}

func (m Manet) Print() {
	fmt.Println("PRINT MANET")
	for i := 0; i < Spazio; i++ {
		present := false
		for idx, _ := range m.Nodes {
			if i == m.Nodes[idx].Position {
				present = true
				fmt.Print(" " + strconv.Itoa(m.Nodes[idx].Value))
			}
		}
		if !present {
			fmt.Print(" -")
		}
	}
	fmt.Println()
	return
}

//func (m Manet) GeneratePackets() {
//	fmt.Println("GENERATE PACKETS")
//	i := 0
//	for i<NumPacchetti {
//		time.Sleep(time.Second * 2)
//
//		var p packet.Packet
//		p.Value = i
//		p.To = strconv.Itoa(rand.Intn(NumNodi))
//		//from := rand.Intn(NumNodi)
//		from := -1
//		//p.From = strconv.Itoa(from)
//		//for p.From == p.To {
//		//	from = rand.Intn(NumNodi)
//			p.From = strconv.Itoa(from)
//		//}
//		p.Hops.PushBack("-1")
//
//		m.Nodes[ rand.Intn(NumNodi) ].Ch <- p
//		i++
//	}
//	return
//}
